using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkDiagramTools._Configuration
{
    /// <summary>
    /// <para>Add Radial Tree Layout</para>
    /// <para>Adds the Radial Tree Layout algorithm to the list of layouts to be automatically chained at the end of the building of diagrams based on a given template. This tool also presets the Radial Tree Layout algorithm parameters for any diagram based on that template.</para>
    /// <para>将径向树布局算法添加到布局列表中，以便在基于给定模板构建逻辑示意图结束时自动链接。此工具还为基于该模板的任何逻辑示意图预设径向树布局算法参数。</para>
    /// </summary>    
    [DisplayName("Add Radial Tree Layout")]
    public class AddRadialTreeLayout : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddRadialTreeLayout()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_utility_network">
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// </param>
        /// <param name="_template_name">
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// </param>
        /// <param name="_is_active">
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the layout algorithm will automatically execute when generating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added layout algorithm will automatically run during the generation of any diagram that is based on the Input Diagram Template parameter. This is the default.
        ///       <para>The parameter values specified for the layout algorithm are used to run the layout during diagram generation. They are also loaded by default when the algorithm is to be run on any diagram based on the input template.    </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>Unchecked—All the parameter values currently specified for the added layout algorithm will be loaded by default when the algorithm is to be run on any diagram based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成逻辑示意图时是否自动执行布局算法。
        ///   <bulletList>
        /// <bullet_item>选中 - 添加的布局算法将在生成基于输入逻辑示意图模板参数的任何逻辑示意图期间自动运行。这是默认设置。
        ///       <para>为布局算法指定的参数值用于在逻辑示意图生成期间运行布局。默认情况下，当算法要在基于输入模板的任何逻辑示意图上运行时，也会加载它们。   </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>未选中—默认情况下，当要在基于输入模板的任何逻辑示意图上运行该算法时，将加载当前为添加的布局算法指定的所有参数值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// </param>
        public AddRadialTreeLayout(object _in_utility_network, object _template_name, _is_active_value _is_active)
        {
            this._in_utility_network = _in_utility_network;
            this._template_name = _template_name;
            this._is_active = _is_active;
        }
        public override string ToolboxName => "Network Diagram Tools";

        public override string ToolName => "Add Radial Tree Layout";

        public override string CallName => "nd.AddRadialTreeLayout";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_utility_network, _template_name, _is_active.GetGPValue(), _are_containers_preserved.GetGPValue(), _is_unit_absolute.GetGPValue(), _initial_radius_absolute, _initial_radius_proportional, _disjoined_graph_absolute, _disjoined_graph_proportional, _radius_factor, _out_utility_network, _out_template_name];

        /// <summary>
        /// <para>Input Network</para>
        /// <para>The utility network or trace network containing the diagram template to modify.</para>
        /// <para>包含要修改的逻辑示意图模板的公共设施网络或追踪网络。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_utility_network { get; set; }


        /// <summary>
        /// <para>Input Diagram Template</para>
        /// <para>The name of the diagram template to modify.</para>
        /// <para>要修改的逻辑示意图模板的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _template_name { get; set; }


        /// <summary>
        /// <para>Active</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the layout algorithm will automatically execute when generating diagrams based on the specified template.
        ///   <bulletList>
        ///     <bullet_item>Checked—The added layout algorithm will automatically run during the generation of any diagram that is based on the Input Diagram Template parameter. This is the default.
        ///       <para>The parameter values specified for the layout algorithm are used to run the layout during diagram generation. They are also loaded by default when the algorithm is to be run on any diagram based on the input template.    </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>Unchecked—All the parameter values currently specified for the added layout algorithm will be loaded by default when the algorithm is to be run on any diagram based on the input template.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定在基于指定模板生成逻辑示意图时是否自动执行布局算法。
        ///   <bulletList>
        /// <bullet_item>选中 - 添加的布局算法将在生成基于输入逻辑示意图模板参数的任何逻辑示意图期间自动运行。这是默认设置。
        ///       <para>为布局算法指定的参数值用于在逻辑示意图生成期间运行布局。默认情况下，当算法要在基于输入模板的任何逻辑示意图上运行时，也会加载它们。   </para>
        ///     </bullet_item><para/>
        ///     <bullet_item>未选中—默认情况下，当要在基于输入模板的任何逻辑示意图上运行该算法时，将加载当前为添加的布局算法指定的所有参数值。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Active")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _is_active_value _is_active { get; set; }

        public enum _is_active_value
        {
            /// <summary>
            /// <para>ACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ACTIVE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>INACTIVE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("INACTIVE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Preserve container layout</para>
        /// <para><xdoc>
        ///   <para>Specifies how the algorithm will process containers.
        ///   <bulletList>
        ///     <bullet_item>Checked—The layout algorithm will execute on the top graph of the diagram so containers are preserved.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The layout algorithm will execute on both content and noncontent features in the diagram. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定算法将如何处理容器。
        ///   <bulletList>
        ///     <bullet_item>选中 - 布局算法将在逻辑示意图的顶部图形上执行，以便保留容器。</bullet_item><para/>
        ///     <bullet_item>未选中 - 布局算法将对逻辑示意图中的内容要素和非内容要素执行。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Preserve container layout")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _are_containers_preserved_value _are_containers_preserved { get; set; } = _are_containers_preserved_value._false;

        public enum _are_containers_preserved_value
        {
            /// <summary>
            /// <para>PRESERVE_CONTAINERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PRESERVE_CONTAINERS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>IGNORE_CONTAINERS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("IGNORE_CONTAINERS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Spacing values interpreted as absolute units in the diagram coordinate system</para>
        /// <para><xdoc>
        ///   <para>Specifies how parameters representing distances will be interpreted.
        ///   <bulletList>
        ///     <bullet_item>Checked—The layout algorithm will interpret any distance values as linear units.  </bullet_item><para/>
        ///     <bullet_item>Unchecked—The layout algorithm will interpret any distance values as relative units to an estimation of the average of the junction sizes in the current diagram extent. This is the default.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定如何解释表示距离的参数。
        ///   <bulletList>
        ///     <bullet_item>选中 - 布局算法会将任何距离值解释为线性单位。</bullet_item><para/>
        ///     <bullet_item>未选中 - 布局算法会将任何距离值解释为当前逻辑示意图范围内交汇点大小平均值估计值的相对单位。这是默认设置。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spacing values interpreted as absolute units in the diagram coordinate system")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _is_unit_absolute_value _is_unit_absolute { get; set; } = _is_unit_absolute_value._false;

        public enum _is_unit_absolute_value
        {
            /// <summary>
            /// <para>ABSOLUTE_UNIT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ABSOLUTE_UNIT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>PROPORTIONAL_UNIT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PROPORTIONAL_UNIT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Initial Radius</para>
        /// <para>The radius of the first concentric circle whose center is the radial tree root junction—that is, the radius of the circle around which the diagram junctions belonging to the first hierarchical level are placed. The default is 5 in the units of the diagram's coordinate system. This parameter can only be used with absolute units.</para>
        /// <para>第一个同心圆的半径，其中心是径向树根交汇点，即属于第一个层次层的逻辑示意图交汇点围绕该圆放置的半径。默认值为 5，以逻辑示意图坐标系为单位。此参数只能用于绝对单位。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Initial Radius")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _initial_radius_absolute { get; set; } = "5 Unknown";


        /// <summary>
        /// <para>Initial Radius</para>
        /// <para>The radius of the first concentric circle whose center is the radial tree root junction—that is, the radius of the circle around which the diagram junctions belonging to the first hierarchical level are placed. The default is 5. This parameter can only be used with proportional units.</para>
        /// <para>第一个同心圆的半径，其中心是径向树根交汇点，即属于第一个层次层的逻辑示意图交汇点围绕该圆放置的半径。默认值为 5。此参数只能与比例单位一起使用。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Initial Radius")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _initial_radius_proportional { get; set; } = 5;


        /// <summary>
        /// <para>Between Disjoined Graphs</para>
        /// <para>The minimum spacing that will separate features belonging to disjoined graphs when the diagram contains such graphs. This parameter is used with absolute units. The default is 4 in the units of the diagram's coordinate system.</para>
        /// <para>当逻辑示意图包含属于分离图形的要素时，分隔属于分离图形的要素的最小间距。此参数用于绝对单位。默认值为逻辑示意图坐标系单位的 4。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Disjoined Graphs")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string _disjoined_graph_absolute { get; set; } = "10 Unknown";


        /// <summary>
        /// <para>Between Disjoined Graphs</para>
        /// <para>The minimum spacing that will separate features belonging to disjoined graphs when the diagram contains such graphs. This parameter is used with proportional units. The default is 4.</para>
        /// <para>当逻辑示意图包含属于分离图形的要素时，分隔属于分离图形的要素的最小间距。此参数用于比例单位。默认值为 4。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Between Disjoined Graphs")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _disjoined_graph_proportional { get; set; } = 10;


        /// <summary>
        /// <para>Radius Factor</para>
        /// <para>The multiplicative factor used to increase or decrease the radius of each concentric circle. It is also the distance that separates each concentric circle related to a hierarchical level. When using a radius factor less than 1, the distance that separates the diagram junctions belonging to the (n) hierarchical level and the (n+1) hierarchical level progressively decreases. With a factor greater than 1, the distance between the hierarchical levels increases progressively. The default is 1.</para>
        /// <para>用于增加或减少每个同心圆半径的乘法因子。它也是与层次结构相关的每个同心圆之间的距离。当使用小于 1 的半径因子时，属于 （n） 分层级别和 （n+1） 分层级别的逻辑示意图交汇点之间的距离逐渐减小。当因子大于 1 时，层次结构级别之间的距离会逐渐增加。默认值为 1。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Radius Factor")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double _radius_factor { get; set; } = 1;


        /// <summary>
        /// <para>Output Network</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Network")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_utility_network { get; set; }


        /// <summary>
        /// <para>Output Diagram Template</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Diagram Template")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_template_name { get; set; }


        public AddRadialTreeLayout SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}